A type can be defined by the branch of mathematics known as type theory. Type theory categorizes a set of entities by placing each entity in one or more sets called types. An entity can be a member of more than one set and thus can have more than one type. A type system provides a set of rules for defining a set of types, which may be finite or infinite.
Type systems have found wide use in classifying computer data. All programming languages use some form of type system in order to distinguish between different sizes and categories of data. On the basic level, type systems are used to distinguish floating point data, integral data, character data, and pointer data. Type systems are also used to define structured data, such as a class in object-oriented programming. Databases employ type systems to define the content of tables and to define the operations that can be performed on tables and rows. Technologies like Extensible Markup Language (XML) use type systems to categorize different XML documents and fragments. (There are many possible applications of type systems to computer data. The preceding examples should be understood to be illustrative of the possible uses of type systems and should not in any way be construed to limit the possible applications of the present invention.)
As type systems evolve, they are becoming increasingly complicated, requiring more time, skill, knowledge and ultimately money to create type systems that are easily extensible. Consequently, the generation and deployment of extensible type systems is increasingly tedious and unnecessarily complicated for the average developer.